﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OWLServer.owl.tipos
{
    /// <summary>
    /// Clase que representa una propiedad de objeto en una ontología.
    /// </summary>
    public class PropiedadObjeto : Propiedad
    {
        private IList<PropiedadObjeto> inversosPropiedadesObjeto;

        /// <summary>
        /// Propiedades inversas de esta propiedad
        /// </summary>
        public virtual IList<PropiedadObjeto> InversosPropiedadesObjeto
        {
            get { return inversosPropiedadesObjeto; }
            set { inversosPropiedadesObjeto = value; }
        }

        public PropiedadObjeto() { }

        public PropiedadObjeto(string id) : base(id)
        {
            inicializarListas();
        }

        public PropiedadObjeto(Elemento elemento)
            : base(elemento)
        {
            inicializarListas();
        }

        public PropiedadObjeto(string id, EspacioNombres espacioNombres)
            : base(id, espacioNombres)
        {
            inicializarListas();
        }

        /// <summary>
        /// Inicializa las listas de elementos
        /// </summary>
        private void inicializarListas()
        {
            inversosPropiedadesObjeto = new List<PropiedadObjeto>();
        }

        /// <summary>
        /// Devuelve la lista de inversos en un Diccionario
        /// </summary>
        /// <returns>Diccionario de inversos</returns>
        public virtual IDictionary<string, PropiedadObjeto> getInversosPropiedadesObjetoDictiorary()
        {
            return InversosPropiedadesObjeto.ToDictionary(e => e.ToString(), e => e);
        }
    }
}
